package mapa;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import org.openstreetmap.gui.jmapviewer.Coordinate;
import org.openstreetmap.gui.jmapviewer.JMapViewer;
import org.openstreetmap.gui.jmapviewer.JMapViewerTree;
import org.openstreetmap.gui.jmapviewer.Layer;
import org.openstreetmap.gui.jmapviewer.MapMarkerDot;
import org.openstreetmap.gui.jmapviewer.MapPolygonImpl;
import org.openstreetmap.gui.jmapviewer.interfaces.MapMarker;

public class Mapa extends JMapViewerTree {

	private static final long serialVersionUID = 1L;
	private static Mapa instancia;
	private static String nombre = "Lista de usuarios";
	private Coordinate ultimoClick;

	public Mapa() {
		super(nombre);
		_map().addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				setUltimoClick(_map().getPosition(getMousePosition()));
			}
		});
	}

	public void _agregarRecorrido(MapPolygonImpl recorrido) {
		_map().addMapPolygon(recorrido);
	}

	public void _agregarClientes(MapMarker Inicio) {
		_map().addMapMarker(Inicio);
	}

	public void _agregarMarcaAlLayer(String nombreLaye, Coordinate cordenada) {
		Layer layer = new Layer(nombreLaye);
		addLayer(layer);
		_agregarPunto(layer, cordenada);
	}

	public static Mapa _GetMapa() {
		if (instancia == null)
			instancia = new Mapa();
		return instancia;
	}

	/**
	 * elimina todas las cosas que estan sobre el mapa, pero no el tree
	 */
	public void _limpiarMapa() {
		_eliminarMarcas();
		_eliminarRecorrido();
		_eliminarRectangulo();
	}

	private void _eliminarRectangulo() {
		_map().removeAllMapRectangles();
	}

	private void _eliminarRecorrido() {
		_map().removeAllMapPolygons();
	}

	private void _eliminarMarcas() {
		_map().removeAllMapMarkers();
	}

	private void _agregarPunto(Layer layer, Coordinate cordenada) {
		_map().addMapMarker(new MapMarkerDot(layer, cordenada));
	}

	public void _centrarMapa() {
		_map().setDisplayToFitMapPolygons();
		;
	}

	private JMapViewer _map() {
		return getViewer();
	}

	public Coordinate getUltimoClick() {
		return ultimoClick;
	}

	public void setUltimoClick(Coordinate ultimoClick) {
		this.ultimoClick = ultimoClick;
	}

}
